//
//  HomeTableViewController.swift
//  HMWeibo08
//
//  Created by 唐万超 on 15/7/28.
//  Copyright © 2015年 唐万超. All rights reserved.
//

import UIKit

class HomeTableViewController: BaseTableViewController {
    
    /// 微博数据数组
    var statuses: [Status]? {
    
        didSet {
            // 赋值之后刷新数据
            tableView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 当用户没有登录则执行
        if !UserAccount.userLogon {
            visitorView?.setUpVisitorView(true, iconViewName: "visitordiscover_feed_image_smallicon", message: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        prepareTableView()
        
        loadStatus()
      
    }
    
    /// 准备tableView
    private func prepareTableView() {
    
        // 注册原型cell
        tableView.registerClass(StatusNormalCell.self, forCellReuseIdentifier: StatusCellIdentifier.NormalCell.rawValue)
        tableView.registerClass(StatusForwardCell.self, forCellReuseIdentifier: StatusCellIdentifier.ForwardCell.rawValue)
        
        // 预测行高 ，预估行高，提前计算行高，有利于提高性能
        tableView.estimatedRowHeight = 300
        // 自动设置行高
       // tableView.rowHeight = UITableViewAutomaticDimension
        
       // tableView.rowHeight = 300
        
        // 去掉cell分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        
        // 实例化下拉刷新控件
        refreshControl = TWCRefreshControl()
        
        refreshControl?.addTarget(self, action: "loadStatus", forControlEvents: UIControlEvents.ValueChanged)
    }

    /// 上拉刷新标识
     private var pullupRefresh = false
    
     func loadStatus() {
    
        refreshControl?.beginRefreshing()
        
        var max_id = 0
        var since_id = statuses?.first?.id ?? 0
        
        if pullupRefresh {
            
            // 将since_id 清0，防止干扰
            since_id = 0
            max_id = statuses?.last?.id ?? 0
        }
        
        Status.loadStatus(since_id, max_id: max_id) { (dataList, error) -> () in
            //print(dataList)
            // 获取的数据关闭刷新控件，结束刷新
            self.refreshControl?.endRefreshing()
            
            // 上拉刷新完复位标记
            self.pullupRefresh = false

            
            if error != nil {
                print(error)
                return
            }
            
            let count = dataList?.count ?? 0
            print("刷新到\(count) 条数据")
            
            // 当下拉刷新的时候才需要提示
            if since_id > 0 {
                self.showPulldownTip(count)
            }
            
            // 如果没有数据，直接返回
            if count == 0 {
                return
            }
            
            if since_id > 0 {
            
                self.statuses = dataList! + self.statuses!
            }else if max_id > 0{
                self.statuses = self.statuses! + dataList!
                
//                // 刷新完复位标记
//                self.pullupRefresh = false
            
            }else {
                
                self.statuses = dataList
            }
            
        }
        
    }
    
    // 下拉刷新获取微博数的提示
    private func showPulldownTip(count: Int) {
        
        tipLabel.text = count == 0 ? "暂时没有新的微博" : "刷新到\(count)条微博"
        
        // 纪录label初始位置
        let rect = tipLabel.frame
        UIView.animateWithDuration(2.0, animations: { () -> Void in
            
            // 让动画怎么来的再怎么回去
            UIView.setAnimationRepeatAutoreverses(true)
            
            self.tipLabel.frame = CGRectOffset(rect, 0, 3 * rect.size.height)
            
            }) { (_) -> Void in
                // 回到初始位置
                self.tipLabel.frame = rect
        }
    }
    
    // MARK: - 数据源方法
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 有数据就返回，没有就返回0
        return statuses?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let status = statuses![indexPath.row]
        
        let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellIdentifier.cellId(status), forIndexPath: indexPath) as! StatusCell
        
        if indexPath.row == statuses!.count - 1 {
        
            // 设置上拉标记，进行上拉
            pullupRefresh = true
            loadStatus()
        }
        //cell.textLabel?.text = statuses![indexPath.row].user?.name
        cell.statuses = statuses![indexPath.row]
        
        return cell
        
    }
    
    
    // 行高的代理方法：将行高缓存到微博模型的属性中
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        let status = statuses![indexPath.row]
        
        let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellIdentifier.cellId(status)) as? StatusCell
        
        // 当行高有缓存就返回
        if let h = status.rowHeight {
            //print("返回缓存的行高")
            return h
        }
        //print("计算行高")
        // 纪录并返回
        status.rowHeight = cell?.rowHeight(status)
        
        return cell!.rowHeight(status)
        
    }
    
    // MARK: - 懒加载控件
    private lazy var tipLabel: UILabel = {
    
        let h: CGFloat = 44
        let label = UILabel(frame: CGRect(x: 0, y: -2 * h, width: self.view.bounds.width, height: h))
        
        label.backgroundColor = UIColor.orangeColor()
        label.textColor = UIColor.whiteColor()
        label.textAlignment = NSTextAlignment.Center
        
        // 将label添加到navigationBar上
        self.navigationController?.navigationBar.insertSubview(label, atIndex: 0)
        
        return label
        
    }()
   
}
